//
// Created by qsy on 2023/8/21.
//

#include "trial.h"
#include "Read_Pin.h"
#include "tim.h"

//==================================================================================================
//| 函数名称 | Trial_Process()
//|----------|--------------------------------------------------------------------------------------
//| 函数功能 | 测试流程控制函数
//|----------|--------------------------------------------------------------------------------------
//| 输入参数 | 无
//|----------|--------------------------------------------------------------------------------------
//| 返回参数 | 无
//|----------|--------------------------------------------------------------------------------------
//| 描述说明 |
//|----------|--------------------------------------------------------------------------------------
//| 函数设计 | FU,2023.08.21
//==================================================================================================
TrialDataFrm TrialData;
uint8_t EnableFLag = 0;
uint8_t DisableFLag = 0;
void Trial_Process(void)
{
    switch (TrialData.Status)
    {
        // 测试状态--空闲 0
        case TRIAL_IDEL_CASE_0:
        {
            if(SystemStatus.Trial_Ready == 1)
            {
                TrialData.Status = TRIAL_READY_CASE_1;      // 跳转到 ready
                TrialData.prev_Status = TRIAL_IDEL_CASE_0;
            }
            break;
        }

        // 测试状态--准备 1
        case TRIAL_READY_CASE_1:
        {
            //----
//            TrialData.UsedTimCnt = 0;//用来计时的
            EnableFLag = 1;  //使能标志
            DisableFLag = 1; //使能标志

            //-----
            if(SystemStatus.Trial_On == 1)
            {
                TrialData.Status = TRIAL_ON_CASE_2;      // 跳转到 trial_on
                TrialData.prev_Status = TRIAL_READY_CASE_1;
            }
            break;
        }

        // 测试状态--运行ing 2
        case TRIAL_ON_CASE_2:
        {
            //UsedTimCnt计数的定义，放在定时器内计时,根据具体定时时间来定
//            TrialData.UsedTimCnt++;
            //注意这里计时完成后会stop
//            if(TrialData.UsedTimCnt == TrialData.TimSet)
//            {
//                SystemStatus.Trial_Stop = 1;
//            }
            //------计数的代码-------------

            //暂时考虑用控制PB0的外部中断来控制
            if (EnableFLag == 1)
            {
                HAL_NVIC_EnableIRQ(EXTI0_IRQn);
                EnableFLag = 0;
            }

            //------------------------
            if(SystemStatus.Trial_Stop == 1)
            {
                TrialData.Status = TRIAL_STOP_CASE_3;      // 跳转到 trial_stop
                TrialData.prev_Status = TRIAL_ON_CASE_2;
            }
            break;
        }

        // 测试状态--运行停止 3
        case TRIAL_STOP_CASE_3:
        {
            //------停止的代码------

            //暂时考虑用控制PB0的外部中断来控制
            if (DisableFLag == 1)
            {
                HAL_NVIC_DisableIRQ(EXTI0_IRQn);  //关闭PB0的中断
                HAL_TIM_Base_Stop_IT(&htim4);     //关闭定时4
                DisableFLag = 0;
            }

            //--------------------

            if (SystemStatus.Trial_Idle == 1)
            {
                TrialData.Status = TRIAL_IDEL_CASE_0;      // 跳转到 trial_Idle
                TrialData.prev_Status = TRIAL_STOP_CASE_3;
            }
            break;
        }

        case TRIAL_ERR_CASE_4:
        {
            break;
        }

        default:
        {
            break;
        }
    }

}
